<?php

/**
 * Paciente form.
 *
 * @package    form
 * @subpackage Paciente
 * @version    SVN: $Id: sfDoctrineFormTemplate.php 6174 2007-11-27 06:22:40Z fabien $
 */

class PacienteForm extends BasePacienteForm
 {
  protected function initialize()
  {
  	$this->labels = array
  	                (
  	                  'id'               => 'id',
  	                  'parentesco_id'    => 'Parentesco',
  	                  'tipo_sangre_id'   => 'Tipo de Sangre',             
  	                  'estado_civil_id'  => 'Estado Civil',             
                      'usuario_id'       => 'Usuario',
                      'distrito_id'      => 'Distrito',
  	                  'dni'              => 'DNI.',                        
                      'nombre'           => 'nombre',                     
                      'apellido_paterno' => 'A. Paterno',          
                      'apellido_materno' => 'A. Materno',
                      'fecha_nacimiento' => 'Fecha. Nacimiento',
                      'sexo'             => 'Sexo.',
  	                  'imagen'           => 'Foto',
  	                  'direccion'        => 'Direcci&oacute;n',
                      'descripcion'      => 'Descripci&oacute;n',             
                      'estado'           => 'Estado',             
  	                );
  }
  public function configure()
  {
  	$months = kcDateTime::generateMonths();
    $days   = kcDateTime::generateDays();
    $years  = kcDateTime::generateYears(1929, null);
    
  	$this->setWidgets(array
  	(
      'id'                => new sfWidgetFormInputHidden(),
  	  'tipo_sangre_id'    => new sfWidgetFormDoctrineSelect
                             (
                               array
                               (
                                 'model'     => 'TipoSangre', 
                                 'add_empty' => '---Seleccionar---', 
                                 'order_by'  => array('Nombre', 'asc')
                               )
                             ),
  	  'parentesco_id'    => new sfWidgetFormDoctrineSelect
                             (
                               array
                               (
                                 'model'     => 'Parentesco', 
                                 'add_empty' => '---Seleccionar---', 
                                 'order_by'  => array('Nombre', 'asc')
                               )
                             ),
  	  'estado_civil_id'  => new sfWidgetFormDoctrineSelect
                             (
                               array
                               (
                                 'model'     => 'EstadoCivil', 
                                 'add_empty' => '---Seleccionar---', 
                                 'order_by'  => array('Nombre', 'asc')
                               )
                             ),
      'dni'              => new sfWidgetFormInput(array(), array('size' => 8)),
      'nombre'           => new sfWidgetFormInput(array(), array('size' => 20)),  	  
      'apellido_paterno' => new sfWidgetFormInput(array(), array('size' => 20)),  	  
      'apellido_materno' => new sfWidgetFormInput(array(), array('size' => 20)),
      'fecha_nacimiento' => new sfWidgetFormDate
                            (
                              array
                              (
                                'format' =>'%day%&nbsp;%month%&nbsp;%year%', 
                                'months' => $months,
                                'days'   => $days,
                                'years'  => $years,
                              )
                            ),
      'sexo'             => new sfWidgetFormSelect(array('choices' => $this->getObject()->getTable()->getSexo())),
      'direccion'        => new sfWidgetFormTextarea(),
      'distrito_id'      => new sfWidgetFormDoctrineChoice(array('model' => 'Distrito', 'add_empty' => true)),/*new sfWidgetFormJQueryAutocompleter//new sfWidgetFormDoctrineSelect
                            (
                              array
                              (
                                'model'     => 'Distrito',
                                'url'   => $this->getOption('url'), 
                               // 'add_empty' => '---Seleccionar---', 
                               // 'order_by'  => array('Nombre', 'asc')
                              )
                            ),                          */
      'imagen'           => new sfWidgetFormInputFile(array(), array('size' => 40, 'onKeyDown' => 'return false', 'onKeyPress' => 'return false')),                            
      'descripcion'      => new sfWidgetFormTextarea(),                             
      'alergias_list'    => new sfWidgetFormDoctrineChoiceMany
                            (
                              array
                              (
                                'model'            => 'Alergia',
                                'renderer_class'   => 'sfWidgetFormSelectDoubleList',  //sfDoubleList
                                'renderer_options' => array
                                                      (
                                                        'label_associated'   => 'Alergias Encontradas',
                                                        'label_unassociated' => 'Alergias No Encontradas'
                                                      )
                              )
                            ),
      'estado'           => new sfWidgetFormSelect(array('choices' => $this->getTable()->getEstado())),                                                        
  	));
  	
  	$this->widgetSchema['distrito_id']->setOption('renderer_class', 'sfWidgetFormDoctrineJQueryAutocompleter');
    
    $this->widgetSchema['distrito_id']->setOption(
      'renderer_options',
      array(
        'url'   => 'http://localhost/salud_online/web/backend_dev.php/paciente/autocomplete',
        'model' => 'Distrito'
      )
    );
  	$this->addValidators
    (
      array
      (
        'imagen'        => new sfValidatorFile
                        (
                          array
                          (
                            'required'   => true,
                            'max_size'   => 512000,
                            'mime_types' => 'web_images',
                            'path'       => sfConfig::get('app_vars_paciente_path').'/'
                          )
                        ),                       
      )
    );
  	
  	
  	$this->types = array
  	(
      'id'               => '=',
  	  'parentesco_id'    => array('combo', array()),
  	  'tipo_sangre_id'   => array('combo', array()),             
  	  'estado_civil_id'  => array('combo', array()),
  	  'distrito_id'      => array('combo', array()),
  	  'familia_id'       => '-',             
      'usuario_id'       => '-',
  	  'dni'              => 'code',                        
      'nombre'           => 'name',                     
      'apellido_paterno' => 'name',          
      'apellido_materno' => 'name',
      'fecha_nacimiento' => 'date',
  	  'direccion'        => 'text',
      'sexo'             => array('combo', array('choices' => array_keys($this->getObject()->getTable()->getSexo()))),
  	  'imagen'           => '=',
      'tipo_paciente'    => '-',           
      'descripcion'      => 'text',             
      'estado'           => array('combo', array('choices' => array_keys($this->getObject()->getTable()->getEstado()))),           
      'slug'             => '-',          
      'created_at'       => '-',  
      'updated_at'  	 => '-',
  	  'alergias_list'    => 'pass',
  	);
  }
  
  public function updateValidatorSchemas()
  {
    if(!$this->isNew())
    {
      $this->validatorSchema['imagen']->setOption('required', false);
    }
  }
  
  protected function doSave($con = null)
  {
    if (is_null($con))
    {
      $con = $this->getConnection();
    }

    $this->updateObjectPaciente();

    // i18n table
    if ($this->isI18n())
    {
      $this->updateI18nObjects($con);
    }

    $this->object->save($con);
  }
  
  
  protected function updateObjectPaciente()
  {
    $values    = $this->getValues();
    $paciente  = $this->object;
    
    $paciente->setTipoSangre(Doctrine::getTable('TipoSangre')->findOneById($values['tipo_sangre_id']));
    $paciente->setParentesco(Doctrine::getTable('Parentesco')->findOneById($values['parentesco_id']));
    $paciente->setEstadoCivil(Doctrine::getTable('EstadoCivil')->findOneById($values['estado_civil_id']));
    $paciente->setDistrito(Doctrine::getTable('Distrito')->findOneById($values['distrito_id']));
    $paciente->setDni($values['dni']);
    $paciente->setNombre($values['nombre']);
    $paciente->setApellidoPaterno($values['apellido_paterno']);
    $paciente->setApellidoMaterno($values['apellido_materno']);
    
    $paciente->setFechaNacimiento($values['fecha_nacimiento']);
    $paciente->setSexo($values['sexo']);
    $paciente->setDescripcion($values['descripcion']);
    $paciente->setDireccion($values['direccion']);
    foreach($values['alergias_list'] as $alergia)
    {
      $paciente->Alergias[] = Doctrine::getTable('Alergia')->findOneById($alergia);
    }
    $paciente->setSlug(Toolkit::getSlugFromName($values['nombre']));
    $paciente->setEstado($values['estado']);
    
    $file = $this->getValue('imagen');
    
    if ($file)
    {
      $filename  = $this->object->getSlug().$file->getExtension($file->getOriginalExtension());
      $newPath   = sfConfig::get('app_vars_paciente_path').'/'.$filename;
    
      $thumbnail = new sfThumbnailExt();
      $thumbnail->loadFile($file->getTempName());
      $thumbnail->save($newPath, $file->getType());
      $thumbnail->freeAll();
      
      $this->object->setImagen($filename);
    }
  }
}